- Published on
4.1.Flask 通用模块
- Authors

- Name
- xiaobai
1.应用工厂(Application Factory)
# app/__init__.py
from flask import Flask
def create_app(config_object=None):
app = Flask(__name__)
if config_object:
app.config.from_object(config_object)
# 这里可初始化数据库、注册蓝图、加载扩展等
return app
好处:解耦环境配置、利于测试与多实例部署。
2.配置管理
# app/config.py
import os
class BaseConfig:
SECRET_KEY = os.getenv('SECRET_KEY', 'dev-secret')
JSON_SORT_KEYS = False
class DevConfig(BaseConfig):
DEBUG = True
class ProdConfig(BaseConfig):
DEBUG = False
在入口根据环境切换:
from app import create_app
from app.config import DevConfig, ProdConfig
import os
cfg = DevConfig if os.getenv('ENV', 'dev') == 'dev' else ProdConfig
app = create_app(cfg)
3.Blueprint 组织
from flask import Blueprint
api = Blueprint('api', __name__, url_prefix='/api')
admin = Blueprint('admin', __name__, url_prefix='/admin')
def register_blueprints(app):
app.register_blueprint(api)
app.register_blueprint(admin)
4.错误处理与统一响应
from flask import jsonify
def register_error_handlers(app):
@app.errorhandler(404)
def not_found(e):
return jsonify({'error': 'not found'}), 404
@app.errorhandler(500)
def server_error(e):
return jsonify({'error': 'server error'}), 500
建议:定义通用响应结构(code、message、data),中台接口更易消费。
5.日志与请求追踪
import logging
def setup_logging(app):
handler = logging.StreamHandler()
handler.setLevel(logging.INFO)
app.logger.addHandler(handler)
- 结合
request信息输出 traceId / 简易链路;生产使用结构化日志(JSON)。
6.前后置钩子(类似中间件)
from flask import request
def register_hooks(app):
@app.before_request
def before():
app.logger.info(f'Incoming: {request.method} {request.path}')
@app.after_request
def after(response):
response.headers['X-App'] = 'flask-demo'
return response
7.跨域(CORS)
pip install flask-cors
from flask_cors import CORS
def enable_cors(app):
CORS(app, resources={r"/api/*": {"origins": "*"}})
8.性能与部署建议
- 使用
gunicorn多进程:gunicorn -w 4 -b 0.0.0.0:5000 app:app - 前置 Nginx,启用压缩与缓存策略;静态资源由前端 CDN 托管。
9.总结
- 通过工厂、配置、蓝图与钩子打造可维护的工程骨架;
- 辅以统一错误、日志与 CORS,满足通用后端服务需求。
